package q904_totalFruit;

public class Solution {
    /*
    此题最关键的是要理解temp的作用
    temp是用来记录第二种树的最后一个位置
    当出现第三种树的时候 first马上就会被更新为temp temp此时又变成了当前窗口的第一种树
    同时second会被更新成i
     */
    public int totalFruit(int[] tree) {
        if (tree.length == 0) return 0;

        int len = 0,first = 0,second = 0,temp = 0;
        for (int i = 0; i < tree.length; i++) {
            // 判断是否出现第三个篮子
            if (tree[i] != tree[first] && tree[i] != tree[second]){
                // 只有初始化时,第一个篮子和第二个篮子都为0时才相等
                // 相等时出现的是第二个篮子,故不用更新first,只需要更新second
                // 不相等时出现的是第三个篮子,故first,second都需要更新

                if(first != second) first = temp;

                second = i;
            }
            // 更新len最大值
            len = Math.max(len,i - first + 1);
            // 计算temp
            if (tree[temp] != tree[i]) temp = i;

        }
        return len;
    }
}
